﻿namespace MicroCloud.Identity.Dtos
{
    /// <summary>
    /// 输出DTO：组织机构信息
    /// </summary>
    [MapFrom(typeof(Organization))]
    public class OrganizationOutputDto : IOutputDto, IDataAuthEnabled
    {
        #region "构造函数"
        #region "初始化一个组织机构信息输出DTO的新实例"
        /// <summary>
        /// 初始化一个组织机构信息输出DTO <see cref="OrganizationOutputDto"/> 的新实例
        /// </summary>
        public OrganizationOutputDto()
        { }
        #endregion
        #region "初始化一个组织机构信息输出DTO的新实例"
        /// <summary>
        /// 初始化一个组织机构信息输出DTO <see cref="OrganizationOutputDto"/> 的新实例
        /// </summary>
        /// <param name="organization">组织机构实体数据</param>
        /// <param name="detail">组织机构详情实体数据</param>
        public OrganizationOutputDto(Organization organization, OrganizationDetail detail)
        {
            Id = organization.Id;

            Type = organization.Type;
            Name = organization.Name;
            Description = organization.Description;

            NameFrgn = detail.NameFrgn;
            Address = detail.Address;
            AddressFrgn = detail.AddressFrgn;
            Address = detail.Address;
            PrintHeader = detail.PrintHeader;
            PrintHeaderFrgn = detail.PrintHeaderFrgn;
            ReptName = detail.ReptName;
            ReptNameFrgn = detail.ReptNameFrgn;
            Remark = detail.Remark;

            OrderNo = organization.OrderNo;
            TreePathString = organization.TreePathString;
            ParentId = organization.ParentId;

            EnableLogin = organization.EnableLogin;
            IsDefault = organization.IsDefault;
            IsSystem = organization.IsSystem;

            IsLocked = organization.IsLocked;

            CreatorId = organization.CreatorId;
            CreatedTime = organization.CreatedTime;

            UpdaterId = organization.UpdaterId;
            UpdatedTime = organization.UpdatedTime;
        }
        #endregion

        #endregion

        #region "属性"
        #region "获取或设置 组织机构编号"
        /// <summary>
        /// 获取或设置 组织机构编号
        /// </summary>
        [Description("编号")]
        public long Id { get; set; }
        #endregion

        #region "获取或设置 组织机构编码"
        /// <summary>
        /// 获取或设置 组织机构编码
        /// </summary>
        [DisplayName("组织机构编码")]
        public string Code { get; set; }
        #endregion

        #region "获取或设置 组织机构类型"
        /// <summary>
        /// 获取或设置 组织机构类型
        /// </summary>
        [DisplayName("组织机构类型")]
        public OrganizationType Type { get; set; }
        #endregion
        #region "获取或设置 组织机构名称"
        /// <summary>
        /// 获取或设置 组织机构名称
        /// </summary>
        [DisplayName("组织机构名称")]
        public string Name { get; set; }
        #endregion
        #region "获取或设置 组织机构描述"
        /// <summary>
        /// 获取或设置 组织机构描述
        /// </summary>
        [DisplayName("组织机构描述")]
        public string Description { get; set; }
        #endregion

        #region "获取或设置 组织机构名称(外文)"
        /// <summary>
        /// 获取或设置 组织机构名称(外文)
        /// </summary>
        [DisplayName("组织机构名称(外文)")]
        public string NameFrgn { get; set; }
        #endregion
        #region "获取或设置 地址"
        /// <summary>
        /// 获取或设置 地址
        /// </summary>
        [DisplayName("地址")]
        public string Address { get; set; }
        #endregion
        #region "获取或设置 地址(外文)"
        /// <summary>
        /// 获取或设置 地址(外文)
        /// </summary>
        [DisplayName("地址(外文)")]
        public string AddressFrgn { get; set; }
        #endregion
        #region "获取或设置 打印抬头"
        /// <summary>
        /// 获取或设置 打印抬头
        /// </summary>
        [DisplayName("打印抬头")]
        public string PrintHeader { get; set; }
        #endregion
        #region "获取或设置 打印抬头(外文)"
        /// <summary>
        /// 获取或设置 打印抬头(外文)
        /// </summary>
        [DisplayName("打印抬头(外文)")]
        public string PrintHeaderFrgn { get; set; }
        #endregion
        #region "获取或设置 报表名称"
        /// <summary>
        /// 获取或设置 报表名称
        /// </summary>
        [DisplayName("报表名称")]
        public string ReptName { get; set; }
        #endregion
        #region "获取或设置 报表名称(外文)"
        /// <summary>
        /// 获取或设置 报表名称(外文)
        /// </summary>
        [DisplayName("报表名称(外文)")]
        public string ReptNameFrgn { get; set; }
        #endregion
        #region "获取或设置 备注"
        /// <summary>
        /// 获取或设置 备注
        /// </summary>
        [DisplayName("备注")]
        public string Remark { get; set; }
        #endregion

        #region "获取或设置 顺序编号"
        /// <summary>
        /// 获取或设置 顺序编号
        /// </summary>
        [DisplayName("顺序编号")]
        public decimal OrderNo { get; set; }
        #endregion
        #region "获取或设置 节点树形路径"
        /// <summary>
        /// 获取或设置 节点树形路径
        /// <para>树链Id根据一定格式构建的字符串，形如："$1$,$3$,$4$,$7$"，编辑时更新。</para>
        /// </summary>
        [DisplayName("节点树形路径")]
        public string TreePathString { get; set; }
        #endregion
        #region "获取或设置 父组织机构编号"
        /// <summary>
        /// 获取或设置 父组织机构编号
        /// </summary>
        [DisplayName("父组织机构编号")]
        public long? ParentId { get; set; }
        #endregion

        #region "获取或设置 启用登陆"
        /// <summary>
        /// 获取或设置 启用登陆
        /// </summary>
        [DisplayName("启用登陆")]
        public bool EnableLogin { set; get; }
        #endregion
        #region "获取或设置 是否默认组织机构"
        /// <summary>
        /// 获取或设置 是否默认组织机构
        /// <para>用户注册后拥有此组织机构</para>
        /// </summary>
        [DisplayName("是否默认组织机构")]
        public bool IsDefault { get; set; }
        #endregion
        #region "获取或设置 是否系统组织机构"
        /// <summary>
        /// 获取或设置 是否系统组织机构
        /// </summary>
        [DisplayName("是否系统组织机构")]
        public bool IsSystem { get; set; }
        #endregion

        #region "获取或设置 是否锁定当前信息"
        /// <summary>
        /// 获取或设置 是否锁定当前信息
        /// </summary>
        [DisplayName("是否锁定")]
        public bool IsLocked { get; set; }
        #endregion

        #region "获取或设置 创建者编号 ICreationAudited 可装载接口，在数据创建时可自动设置当前用户值"
        /// <summary>
        /// 获取或设置 创建者编号
        /// </summary>
        public long? CreatorId { get; set; }
        #endregion
        #region "获取或设置 创建者名称"
        /// <summary>
        /// 获取或设置 创建者名称
        /// </summary>
        [DisplayName("创建者名称")]
        public string CreatorName { get; set; }
        #endregion
        #region "获取或设置 创建者昵称"
        /// <summary>
        /// 获取或设置 创建者昵称
        /// </summary>
        [DisplayName("创建者昵称")]
        public string CreatorNickname { get; set; }
        #endregion
        #region "获取或设置 创建时间 ICreatedTime、ICreationAudited  可装载接口，在数据创建时可自动设置当前时间"
        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        public DateTime CreatedTime { get; set; }
        #endregion

        #region "获取或设置 更新者编号 IUpdateAudited 可装载接口，在数据更新时可自动设置当前用户值"
        /// <summary>
        /// 获取或设置 更新者编号
        /// </summary>
        public long? UpdaterId { get; set; }
        #endregion
        #region "获取或设置 更新者名称"
        /// <summary>
        /// 获取或设置 更新者名称
        /// </summary>
        [DisplayName("更新者名称")]
        public string UpdaterName { get; set; }
        #endregion
        #region "获取或设置 更新者昵称"
        /// <summary>
        /// 获取或设置 更新者昵称
        /// </summary>
        [DisplayName("更新者昵称")]
        public string UpdaterNickname { get; set; }
        #endregion
        #region "获取或设置 更新时间 IUpdatedTime、IUpdateAudited 可装载接口，在数据更新时可自动设置当前时间"
        /// <summary>
        /// 获取或设置 更新时间
        /// </summary>
        [DisplayName("更新时间")]
        public DateTime? UpdatedTime { get; set; }
        #endregion

        //Implementation of IDataAuthEnabled
        #region "获取或设置 是否可更新的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可更新的数据权限状态
        /// </summary>
        public bool Updatable { get; set; }
        #endregion
        #region "获取或设置 是否可删除的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可删除的数据权限状态
        /// </summary>
        public bool Deletable { get; set; }
        #endregion

        #endregion

    }
}
